﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using vudu.EnlaceDatos.SqlServer;
using vudu.Logica.Clases;

namespace vudu.PaginasWeb.G9PracticaMateria
{
    public partial class ModificarSalon : System.Web.UI.Page
    {
        #region Atributos clase ModificarSalon.aspx.cs
        private static int salonL;
        private static int salonM; 
        private static int salonMI;
        private static int salonJ;
        private static int salonV;
        private static int contdorDiasConSalones;
        private HorarioDeClase horaDeClase = new HorarioDeClase();
        public static List<Salon> salonDisponiblesL, salonDisponiblesM, salonDisponiblesMI;
        public static List<Salon> salonDisponiblesJ, salonDisponiblesV;
        private SqlServerPractica sqlServerPractica = new SqlServerPractica();
        private Profesor profesorPractica = new Profesor();
        private Practica practica;
        int idPractica = Convert.ToInt32(ModificarPractica.IdPracticaSeleccionada);
        private static int idEscuela;
        #endregion
        protected void Page_Load(object sender, EventArgs e)
        {
            string miRol = (string)Session["rol"];
            if (miRol != "Escuela")
                Response.Redirect("../G3AccesoSistema/InicioSistema.aspx");
            Escuela miEscuela = (Escuela)Session["Usuario"];
            idEscuela = miEscuela.IdEscuela;
            Label1.Text = "Escuela: " + miEscuela.NombreEscuela;
            if (!Page.IsPostBack)
            {
                vaciarsalones();
                CargarDatosPractica(idPractica);
                if (ModificarHorario.deModificarHorario != true)
                {
                    CargarSalones(idPractica);
                    LlenarSalones();
                }
                else { CaragrSalonesModificarHorario(); }
            }
        }
        public void CargarDatosPractica(int practica)
        {
            Practica laPractica = new Practica();
            //En este paso se llama a la base de datos para consultar los datos
            //de la practica y asignarlos a un objeto de tipo practica
            laPractica = sqlServerPractica.ConsultarDatosPractica(practica);
            //Si la practica no esta vacia entonces rellena los campos de texto
            if (laPractica != null)
            {

                Convert.ToString(laPractica.IdPractica);
                NombrePractica.Text = laPractica.NombrePractica;
                SeccionPractica.Text = Convert.ToString(laPractica.NumeroSeccion);
                Profesor.Text = laPractica.profesor.Nombre + " " + laPractica.profesor.Apellido;

            }
        }
        //Cargo los salones que estan disponibles apra su horario
        public void CargarSalones(int practica)
        {
            //Se crea un objeto de tipo Horario de Clase para almacenar los datos de la consulta a la BD
            List<HorarioDeClase> listaHorasPractica = new List<HorarioDeClase>();
            listaHorasPractica = sqlServerPractica.ConsultarHorasPracticas(practica);
            salonL = 0;
            salonM = 0;
            salonMI= 0;
            salonJ = 0;
            salonV = 0;
            //Si listaHorasPractica no es nulo entonces rellena los campos de texto
            if (listaHorasPractica.Count != 0)
            {

                for (int i = 0; i < listaHorasPractica.Count; i++)
                {
                    string dia = listaHorasPractica[i].Dia;
                    DateTime horaIni = listaHorasPractica[i].HoraInicio;
                    DateTime horaF = listaHorasPractica[i].HoraFin;
                    
                    

                    //Imprime los valores de acuerdo al dia que le corresponda en el horario
                    switch (dia)
                    {
                        case "Lunes":

                            salonDisponiblesL = horaDeClase.SalonesDisponibles(horaIni.Hour, horaF.Hour, "Lunes", idEscuela);
                            salonL = 1;
                            break;
                        case "Martes":
                            salonDisponiblesM = horaDeClase.SalonesDisponibles(horaIni.Hour, horaF.Hour, "Martes", idEscuela);
                            salonM = 1;

                            break;
                        case "Miercoles":
                            salonDisponiblesMI = horaDeClase.SalonesDisponibles(horaIni.Hour,horaF.Hour, "Miercoles", idEscuela);
                            salonMI = 1;
                            break;

                        case "Jueves":
                            salonDisponiblesJ = horaDeClase.SalonesDisponibles(horaIni.Hour,horaF.Hour, "Jueves", idEscuela);
                            salonJ = 1;
                            break;

                        case "Viernes":
                         salonDisponiblesV = horaDeClase.SalonesDisponibles(horaIni.Hour, horaF.Hour, "Viernes", idEscuela);
                         salonV = 1;
                         break;

                        default:

                            break;
                    }


                }
            }

        }

        public void CaragrSalonesModificarHorario()
        {

            salonL = 0;
            salonM = 0;
            salonMI = 0;
            salonJ = 0;
            salonV = 0;
            contdorDiasConSalones = 0;

            ListItem registroLista = new ListItem("- Selecciona -", "00");
            salonesDisponiblesL.Items.Clear();
            salonesDisponiblesM.Items.Clear();
            salonesDisponiblesMI.Items.Clear();
            salonesDisponiblesJ.Items.Clear();
            salonesDisponiblesV.Items.Clear();

            salonesDisponiblesL.Items.Add(registroLista);
            salonesDisponiblesM.Items.Add(registroLista);
            salonesDisponiblesMI.Items.Add(registroLista);
            salonesDisponiblesJ.Items.Add(registroLista);
            salonesDisponiblesV.Items.Add(registroLista);

            if (ModificarHorario.salonesDisponiblesL.Count != 0)
            {
                for (int j = 0; j < ModificarHorario.salonesDisponiblesL.Count; j++)
                {
                    ListItem registroList = new ListItem();
                    registroList.Text = ModificarHorario.salonesDisponiblesL[j].Nombre + " " + ModificarHorario.salonesDisponiblesL[j].Tipo;
                    registroList.Value = ModificarHorario.salonesDisponiblesL[j].NumeroSalon + "";

                    salonesDisponiblesL.Items.Add(registroList);

                }
                salonL = 1;
                contdorDiasConSalones = contdorDiasConSalones + 1;
            }


            if (ModificarHorario.salonesDisponiblesM.Count != 0)
            {
                for (int j = 0; j < ModificarHorario.salonesDisponiblesM.Count; j++)
                {
                    ListItem registroList = new ListItem();
                    registroList.Text = ModificarHorario.salonesDisponiblesM[j].Nombre + " " + ModificarHorario.salonesDisponiblesM[j].Tipo;
                    registroList.Value = ModificarHorario.salonesDisponiblesM[j].NumeroSalon + "";
                    salonesDisponiblesM.Items.Add(registroList);

                }
                salonM = 1;
                contdorDiasConSalones = contdorDiasConSalones + 1;
            }


            if (ModificarHorario.salonesDisponiblesMI.Count != 0)
            {
                for (int j = 0; j < ModificarHorario.salonesDisponiblesMI.Count; j++)
                {
                    ListItem registroList = new ListItem();
                    registroList.Text = ModificarHorario.salonesDisponiblesMI[j].Nombre + " " + ModificarHorario.salonesDisponiblesMI[j].Tipo;
                    registroList.Value = ModificarHorario.salonesDisponiblesMI[j].NumeroSalon + "";
                    salonesDisponiblesMI.Items.Add(registroList);
                }
                salonMI = 1;
                contdorDiasConSalones = contdorDiasConSalones + 1;
            }


            if (ModificarHorario.salonesDisponiblesJ.Count != 0)
            {
                for (int j = 0; j < ModificarHorario.salonesDisponiblesJ.Count; j++)
                {
                    ListItem registroList = new ListItem();
                    registroList.Text = ModificarHorario.salonesDisponiblesJ[j].Nombre + " " + ModificarHorario.salonesDisponiblesJ[j].Tipo;
                    registroList.Value = ModificarHorario.salonesDisponiblesJ[j].NumeroSalon + "";
                    salonesDisponiblesJ.Items.Add(registroList);
                }

                salonJ = 1;
                contdorDiasConSalones = contdorDiasConSalones + 1;
            }


            if (ModificarHorario.salonesDisponiblesV.Count != 0)
            {
                for (int j = 0; j < ModificarHorario.salonesDisponiblesV.Count; j++)
                {
                    ListItem registroList = new ListItem();
                    registroList.Text = ModificarHorario.salonesDisponiblesV[j].Nombre + " " + ModificarHorario.salonesDisponiblesV[j].Tipo;
                    registroList.Value = ModificarHorario.salonesDisponiblesV[j].NumeroSalon + "";
                    salonesDisponiblesV.Items.Add(registroList);
                }
                salonV = 1;
                contdorDiasConSalones = contdorDiasConSalones + 1;
            }
          
        }
        //se encarga de reiniciar el combobox de los salones
        public void vaciarsalones()
        {
            salonesDisponiblesL.Items.Clear();
                 salonesDisponiblesM.Items.Clear();
                 salonesDisponiblesMI.Items.Clear();
                 salonesDisponiblesJ.Items.Clear();
                 salonesDisponiblesV.Items.Clear();
                 ListItem registroLista = new ListItem();
                 registroLista.Text = "-Select-";
                 registroLista.Value = "00";
                 salonesDisponiblesL.Items.Add(registroLista);
                 salonesDisponiblesM.Items.Add(registroLista);
                 salonesDisponiblesMI.Items.Add(registroLista);
                 salonesDisponiblesJ.Items.Add(registroLista);
                 salonesDisponiblesV.Items.Add(registroLista);
        }

        // llena los salones para los dias elegidos
        public void LlenarSalones()
        {
         
            // Creamos un nuevo registro para la tabla
         if (salonDisponiblesL!= null)
            {
                for (int j = 0; j < salonDisponiblesL.Count; j++)
                {
                    ListItem registroList = new ListItem();
                    registroList.Text = salonDisponiblesL[j].Nombre + " " + salonDisponiblesL[j].Tipo;
                    registroList.Value =salonDisponiblesL[j].NumeroSalon + "";
                    salonesDisponiblesL.Items.Add(registroList);

                }
            }


            if (salonDisponiblesM != null)
            {
                for (int j = 0; j < salonDisponiblesM.Count; j++)
                {
                    ListItem registroList = new ListItem();
                    registroList.Text = salonDisponiblesM[j].Nombre + " " + salonDisponiblesM[j].Tipo;
                    registroList.Value = salonDisponiblesM[j].NumeroSalon + "";
                    salonesDisponiblesM.Items.Add(registroList);
                }

            }


            if (salonDisponiblesMI != null)
            {
                for (int j = 0; j < salonDisponiblesMI.Count; j++)
                {
                    ListItem registroList = new ListItem();
                    registroList.Text = salonDisponiblesMI[j].Nombre + " " + salonDisponiblesMI[j].Tipo;
                    registroList.Value = salonDisponiblesMI[j].NumeroSalon + "";
                    salonesDisponiblesMI.Items.Add(registroList);
                }

            }


            if (salonDisponiblesJ != null)
            {
                for (int j = 0; j < salonDisponiblesJ.Count; j++)
                {
                    ListItem registroList = new ListItem();
                    registroList.Text = salonDisponiblesJ[j].Nombre + " " + salonDisponiblesJ[j].Tipo;
                    registroList.Value = salonDisponiblesJ[j].NumeroSalon + "";
                    salonesDisponiblesJ.Items.Add(registroList);
                }


            }
            
            
            if (salonDisponiblesV != null)
            {
                for (int j = 0; j < salonDisponiblesV.Count; j++)
                {
                    ListItem registroList = new ListItem();
                    registroList.Text = salonDisponiblesV[j].Nombre + " " + salonDisponiblesV[j].Tipo;
                    registroList.Value = salonDisponiblesV[j].NumeroSalon + "";
                    salonesDisponiblesV.Items.Add(registroList);
                }

            }

        }
        //valida que se eligio un salon para el dia
        public int ValidarSalonL()
        {
            if (salonL == 1)
            {
                return Convert.ToInt32(salonesDisponiblesL.SelectedValue);
            }
            else
            {
                return 0;
            }
        }
        //valida que se eligio un salon para el dia
        public int ValidarSalonM()
        {
            if (salonM == 1)
            {
                return Convert.ToInt32(salonesDisponiblesM.SelectedValue);
            }
            else
            {
                return 0;
            }
        }
        //valida que se eligio un salon para el dia
        public int ValidarSalonMi()
        {
            if (salonMI == 1)
            {
                return Convert.ToInt32(salonesDisponiblesMI.SelectedValue);
            }
            else
            {
                return 0;
            }
        }
        //valida que se eligio un salon para el dia
        public int ValidarSalonJ()
        {
            if (salonJ == 1)
            {
                return Convert.ToInt32(salonesDisponiblesJ.SelectedValue);
            }
            else
            {
                return 0;
            }
        }
        //valida que se eligio un salon para el dia
        public int ValidarSalonV()
        {
            if (salonV == 1)
            {
                return Convert.ToInt32(salonesDisponiblesV.SelectedValue);
            }
            else
            {
                return 0;
            }
           
            
        }
        //modificar las hroas y salones  se usa cuando uno entra desde modificarhoraspractica
        public void modificarHoras() {

            if (salonL == 1)
            {
                DateTime horaLunesInicio;
                DateTime horaLunesFin;
                horaLunesInicio = DateTime.Parse(ModificarHorario.horaL[0]);
                horaLunesFin = DateTime.Parse(ModificarHorario.horaL[1]);
                practica.ModificarHorarioPractica(horaLunesInicio,horaLunesFin,"Lunes",idPractica);
                practica.ModificarSalonPractica(idPractica, "Lunes", salonesDisponiblesL.SelectedValue);
            }
            

            if (salonM == 1)
            {
                DateTime horaMartesInicio;
                DateTime horaMartesFin;
                horaMartesInicio = DateTime.Parse(ModificarHorario.horaM[0]);
                horaMartesFin = DateTime.Parse(ModificarHorario.horaM[1]);
                practica.ModificarHorarioPractica(horaMartesInicio, horaMartesFin, "Martes", idPractica);
                practica.ModificarSalonPractica(idPractica,"Martes", salonesDisponiblesM.SelectedValue);
            }

            if (salonMI == 1)
            {
                DateTime horaMiInicio;
                DateTime horaMiFin;
                horaMiInicio = DateTime.Parse(ModificarHorario.horaMI[0]);
                horaMiFin = DateTime.Parse(ModificarHorario.horaMI[1]);
                practica.ModificarHorarioPractica(horaMiInicio,horaMiFin, "Miercoles", idPractica);
                practica.ModificarSalonPractica(idPractica, "Miercoles", salonesDisponiblesMI.SelectedValue);
            }

            if (salonJ == 1)
            {
                DateTime horaJuevesInicio;
                DateTime horaJuevesFin;
                horaJuevesInicio = DateTime.Parse(ModificarHorario.horaJ[0]);
                horaJuevesFin = DateTime.Parse(ModificarHorario.horaJ[1]);
                practica.ModificarHorarioPractica(horaJuevesInicio, horaJuevesFin, "Jueves", idPractica);
                practica.ModificarSalonPractica(idPractica, "Jueves", salonesDisponiblesJ.SelectedValue);
            }

            if (salonV == 1)
            {
                DateTime horaViernesInicio;
                DateTime horaViernesFin;
                horaViernesInicio = DateTime.Parse(ModificarHorario.horaV[0]);
                horaViernesFin = DateTime.Parse(ModificarHorario.horaV[1]);
                practica.ModificarHorarioPractica(horaViernesInicio, horaViernesFin, "Viernes", idPractica);
                practica.ModificarSalonPractica(idPractica, "Viernes", salonesDisponiblesV.SelectedValue);
            }

        
        } 
       
        
        protected void Button2_Click(object sender, EventArgs e)
        {
            int contarsalonesmodificados = 0;
            int contarsalonesmodificadoshorario = 0;
            practica = new Practica();

            if (salonL != 0)
            {
                if (salonesDisponiblesL.SelectedValue != "00")
                {//se valida si se vino de la pagina modificar practica o modificar hroario
                    if (ModificarHorario.deModificarHorario != true)
                    {
                        contarsalonesmodificados = contarsalonesmodificados + 1;
                        practica.ModificarSalonPractica(idPractica, "Lunes", salonesDisponiblesL.SelectedValue);

                    }
                    else
                    {
                        contarsalonesmodificadoshorario = contarsalonesmodificadoshorario + 1;
                    }
                }

            }
            if (salonM != 0)
            {
                if (salonesDisponiblesM.SelectedValue != "00")
                {//se valida si se vino de la pagina modificar practica o modificar hroario
                    if (ModificarHorario.deModificarHorario != true)
                    {
                        contarsalonesmodificados = contarsalonesmodificados + 1;
                        practica.ModificarSalonPractica(idPractica, "Martes", salonesDisponiblesM.SelectedValue);
                    }
                    else { contarsalonesmodificadoshorario = contarsalonesmodificadoshorario + 1; }
                }
                

            }
            if (salonMI != 0)
            {
                if (salonesDisponiblesMI.SelectedValue != "00")
                {//se valida si se vino de la pagina modificar practica o modificar hroario
                    if (ModificarHorario.deModificarHorario != true)
                    {
                        contarsalonesmodificados = contarsalonesmodificados + 1;
                        practica.ModificarSalonPractica(idPractica, "Miercoles", salonesDisponiblesMI.SelectedValue);
                    }
                    else { contarsalonesmodificadoshorario = contarsalonesmodificadoshorario + 1; }
                }

            }
            if (salonJ != 0)
            {
                if (salonesDisponiblesJ.SelectedValue != "00")
                {//se valida si se vino de la pagina modificar practica o modificar hroario
                    if (ModificarHorario.deModificarHorario != true)
                    {
                        contarsalonesmodificados = contarsalonesmodificados + 1;
                        practica.ModificarSalonPractica(idPractica, "Jueves", salonesDisponiblesJ.SelectedValue);
                    }
                    else { contarsalonesmodificadoshorario = contarsalonesmodificadoshorario + 1; }
                }

            }
            if (salonV != 0)
            {
                if (salonesDisponiblesV.SelectedValue != "00")
                {//se valida si se vino de la pagina modificar practica o modificar hroario
                    if (ModificarHorario.deModificarHorario != true)
                    {
                        contarsalonesmodificados = contarsalonesmodificados + 1;
                        practica.ModificarSalonPractica(idPractica, "Viernes", salonesDisponiblesV.SelectedValue);
                    }
                    else { contarsalonesmodificadoshorario = contarsalonesmodificadoshorario + 1; }
                }

            }
            //se verifica si viene de modificar  o de modificarhorario
            if (ModificarHorario.deModificarHorario == true)
            {// si los salones elegidos = a los dias que tiene esa practica salones
            //si son 2 dias de practica  tiene que tener 2 salones modificados para poder proseguir
                if (contarsalonesmodificadoshorario == contdorDiasConSalones)
                {
                    modificarHoras();
                    ModificarHorario.deModificarHorario = false;

                    Response.Redirect("../Home/HomeEscuela.aspx");

                }
                
               
            }
            else
            {
                if (contarsalonesmodificados != 0)
                {
                    Response.Redirect("../Home/HomeEscuela.aspx");
                }
               
                
            }
            
        }

        protected void Button1_Click(object sender, EventArgs e)
        {


            Response.Redirect("../G9PracticaMateria/ModificarPractica.aspx");
        }
    }
}